
#ifndef __ANY_TYPE_H__
#define __ANY_TYPE_H__

#include "placeholder.h"

////////////////////////////////////////////////////////////////////////
//  declaration : class any                                           //
////////////////////////////////////////////////////////////////////////

class any
{
public:
	template < typename value_type >
	any ( const value_type & value ) ;

	any ( void ) ;
	any ( const any & other ) ;
	~any ( void ) ;

public:
	template < typename value_type >
	any & operator = ( const value_type & rhs ) ;
	any & operator = ( const any & rhs ) ;

public: 
	any &					swap ( any & rhs ) ;
	bool					empty ( void ) const ;

	const std::type_info &	type ( void ) const ;

private:
	object *	value_ ;
} ;


////////////////////////////////////////////////////////////////////////
//  definition : class any                                            //
////////////////////////////////////////////////////////////////////////


template < typename value_type >
any::any ( const value_type & value )
: value_ ( new placeholder < value_type > ( value ) )
{
	printf ( "%s(): value_type:%s\n", __FUNCTION__, typeid(value_type).name() ) ;
}


template < typename value_type >
any & any::operator = ( const value_type & rhs )
{
	any ( rhs ).swap ( *this ) ;	// safety destruction
	return *this;
}


#endif	// #ifndef __ANY_TYPE_H__